dofile "lib/radical.lua"

function tile(s) 
  return const.path.gfx.."game/mad/"..s..".jpg"; 
end

function cm_tile(s) 
  return const.path.gfx.."game/common/"..s..".jpg"; 
end

function ey_tile(s) 
  return const.path.gfx.."game/eye/"..s..".jpg"; 
end

function dxml(s)
  return const.path.dlg.."4-mad/face/"..s..".xml";
end

face = engine.state {
   _time        = 0     --Start time
  ,_toilet      = false --Fohn saw toilet
  ,_hidden      = false --Fohn tried to take a hidden object
  ,_visitors    = false --Visitors are about to come
  ,_dlgbag      = false --Wrong option in dialog with visitors
  ,_nowater     = false --No water in paper cup
  ,_drugwater   = false --Drug is in water
  ,_rust        = false --A rusty water is in the paper cup
  ,_syringe     = false --Fohn took syringe
  ,_eat         = false --Fohn already tried dinner
  ,_swater      = false --Water is in the syringe
  ,_sdrug       = false --Drug is in the syringe
  ,_evening     = false --It is late evening
  ,_dream       = false --Fohn is dreaming
  ,_tab         = 0     --Fohn took a drug from the table (0,1,2)
  ,_swallow     = false --Fohn tries to swallow a drug
  ,_drugs       = 0     --Fohn swallowed pill (0,1,2)
  ,_doorunlock  = false --Fohn unlocked a door
  ,_pos         = 8     --Position of enemy in coridor
  ,_step        = 1     --Direction in which enemy is moving (1,-1)
}

face_player = musplayer.player {
   sfx("clang"):inside("start0")
  ,mus("threshold"):inside("cell"):loop()
  ,mus("rush"):inside("neardoor"):when("face._visitors")
  ,mute():inside("visitors1")
  ,sfx("bam3"):inside("visitors1")
  ,mus("anxiety"):inside("visitors2"):loop()
  ,sfx("bam2"):inside("fakerun1"):always()
  ,mute():inside("visitors_transition")
  ,sfx("softnote"):inside("visitors_transition")
  ,mus("rush"):inside("fakerun3"):loop()
  ,sfx("impact"):inside("attack1")
  ,mute():inside("attack2")
  ,sfx("impact"):inside("attack2")
  ,sfx("death"):inside("attack3")
  ,mus("anxiety"):inside("dream1"):loop()
  ,mute():inside("coridor_transition")
  ,sfx("dooropen_echo"):inside("coridor_transition"):always()
  ,mus("meeting"):inside("coridor_transition3"):loop()
  ,mute():inside("dooropen")
  ,sfx("dooropen_echo"):inside("dooropen")
  ,sfx("note"):inside("stairs1")
  ,sfx("footsteps"):inside("stairslide")
  ,sfx("softnote"):inside("cellslide2")
  ,mus("threshold"):inside("cell_final"):loop()
  ,sfx("bam3"):inside("final1")
}

main = engine.main {
   start        = chain_ {
                     episode_("4-face")
                    ,musplayer_("face_player")
                    ,walk_("start0")
                  }
  ,finish       = gamefile_("4-mad/petr.lua")
}


------------------------------------------------------------------------------------------
-- Wakeup
------------------------------------------------------------------------------------------

function echo(act, phr, next, snd)
  if snd then
    x,y = 550,400;
  else
    x,y = 120,140;
  end
  return scene {
     bounds     = { x, y, 480 }
    ,enter      = function(s)
                    if os.time()-face._time>=30 then
                      walk("black1");
                    end
                  end
    ,localact   = walkblack_(next)
    ,dsc        = phr.."^^".."{localact|"..act.."}"
    ,ontimer    = function(s)
                    if os.time()-face._time==30 then
                      walk("black1");
                    end
                  end
  }
end

start0 = pause {
   time         = 2000
  ,enter        = exec_("face._time=os.time()")
  ,next         = "start1"
}

start1 = echo("...",                          "-- Что с ней вообще... там... она...", "start2")
start2 = echo("...",                          "-- Да кто сейчас... не знаю... среди ночи... Без нее и так...", "start3", true)
start3 = echo("(Попытаться прислушаться)",    "-- ...она как... Мы не пе... сколько кубиков?", "start4")
start4 = echo("...",                          "-- ...ладно... еще сегодня?", "start5", true)
start5 = echo("...",                          "-- Все, уход... Проверь только, что ничего... Вот, черт!", "start6")
start6 = echo("...",                          "-- ...что ...было?", "start7", true)
start7 = echo("...",                          "-- Да закати... под кровать, кажется... нельзя так...", "start8")
start8 = echo("...",                          "-- Давай я... уверен, что...", "start9", true)
start9 = echo("...",                          "-- Я сам... черт, тут ничего... может, свет...", "start10")
start10 = echo("...",                         "-- Погоди, кажется она и правда... Но ведь это...", "start11", true)
start11 = echo("...",                         "-- Ради бо... Хва... Этого просто не...", "start12")
start12 = echo("...",                         "-- Ох, как я... Терпеть не... Давай, долго еще...", "start13", true)
start13 = echo("(Попробовать открыть глаза)", "-- Никак не могу... Черт, закати... Свет включи, не проснё...", "start14")
start14 = echo("...",                         "-- Стой. Кажется, она...", "start15", true)
start15 = echo("...",                         "-- Прекрати, я не... А может, шут с...", "start16")
start16 = echo("...",                         "-- И что, а если... Так не...", "start17", true)
start17 = echo("...",                         "-- Да кто поле... И что с ним... Хватит, пойдё...", "start18")
start18 = echo("...",                         "-- Не знаю, если только... отве...", "start19", true)
start19 = echo("...",                         "-- Ага, тебе бы лишь... как хо...", "start20")
start20 = echo("...",                         "-- Хорошо, пойдё... в конце...", "start21", true)
start21 = echo("...",                         "-- Проверь хоть, что ничего...", "start22")
start22 = echo("...",                         "-- Я-то не... Все, хва...", "black1")

black1 = pause {
   time         = 3000
  ,fading       = 0
  ,next         = "black2"
}

black2 = pause {
   time         = 1000
  ,tile         = { tile "window", 570, 20 }
  ,fading       = 60
  ,next         = "cell"
}

cell = scene {
   tile         = choose_ {
                     ["default"] = { tile "window", 570, 20 }
                    ,["face._evening"] = tile "wall"
                  }
  ,bounds       = choose_ {
                     ["default"] = { nil, nil, 540 }
                    ,["face._evening"] = { 100, nil, 750 }
                  }
  ,dsc          = choose_ {
                    ["face._dream"] = "Судя по всему, уже глубокая ночь, однако Фён никак не может уснуть."
                  }
  ,alwaysdsc    = true
  ,enter        = choose_ {
                    ["face._visitors"] = walk_("visitors1")
                  }
  ,obj          = { "fohn", "window", "bed", "underbed", "underbed2", "spoon2" }
  ,nav          = {
                    down = vw("В другую часть комнаты", "neardoor")
                  }
}

fohn = staticitem {
   dsc          = choose_ {
                     ["default"] = 
                        [[{Фён} едва стоит на ногах -- она чувствует обморочную слабость, как будто не спала несколько дней кряду, а к горлу 
                          подступает неприятный теплый комок. Зато правая рука больше не болит, хотя и по-прежнему обездвижена. Наверняка 
                          это все из-за того, что ей вкололи вечером -- или ночью? -- но она с трудом может вспомнить, что именно произошло.
                          Как если бы все эти лекарства медленно, но неотвратимо лишали ее памяти.^^]]
                    ,["fohn._seen and not face._evening"] = "{Фён} едва стоит на ногах.^"
                    ,["face._evening and not face._swallow"] = 
                        [[Уже близится ночь, за окном совсем темно, однако {Фён} никак не может уснуть. Она начинает чувствовать слабую боль 
                          в висках.]]
                    ,["face._swallow"] = "{Фён} пытается проглотить таблетку."
                  }
  ,act          = choose_ {
                     ["default"] = 
                        [[Так больше нельзя. Эти люди без лиц постоянно приходят к ней, делают какие-то уколы, пока она лежит без чуств. Так 
                          больше не может продолжаться.]]
                    ,["face._evening and not face._swallow"] = 
                        [[Это снова приближается. Она чувствует. Приступы здесь почему-то гораздо сильнее, чем в старом городе. Быть может, 
                          это из-за людей с темнотой вместо лиц?]]
                    ,["face._swallow"] = chain_ { unset_("fohn._swallow"), inc_("face._drugs"), "Фён не выдержала и выплюнула таблетку на пол." }
                  }
  ,cnd          = not_("face._dream")
}

window = staticitem {
   dsc          = "Свет в {окне} совсем тусклый, Фён чувствует, как в ее камере постепенно сгущается сумрак."
  ,act          = [[Который час? Похоже, уже вечер. Тени стали совсем длинными, а солнце почти скрылось за панельными домами вдалеке.
                    Разноцветная облицовка одинаковых пятиэтажек поблескивает в лучах света. Фён долго смотрит на это багровое застывшее в 
                    стенах домов солнечное отражение. Если сощурить глаза, притворившись близорукой - так, что вдалеке начнет сливаться в 
                    неразборчивую какофонию цветов, - то начинает казаться, что панельные дома медленно плавятся в химическом огне, что 
                    материя превращается в свет и тает в багровом небе. Наверное, в тот самый день, когда город из северного стал мертвым, 
                    все было именно так, только ускоренное в миллионы раз.]]
  ,showonce     = true
  ,cnd          = not_("face._evening")
}

bed = staticitem {
   dsc          = "Металлическая {койка} у стены точно вросла в потресканый пол; кажется, она стоит здесь уже не один десяток лет."
  ,act          = choose_ {
                     ["default"] = "Простыня, и без того не первой свежести, покрыта темными пятнами от пота."
                    ,["face._hidden"] = 
                        [[Фён пытается передвинуть кровать, однако у нее не получается сдвинуть ее ни на сантиметр. Если бы у Фён хотя бы 
                          действовали обе руки...]]
                  }
  ,showonce     = true
  ,cnd          = not_("face._evening")
}

underbed = staticitem {
   dsc          = "Наверняка {под кроватью} скопились целые залежи пыли."
  ,act          = [[Фён заглянула под кровать. Кажется, она начинает что-то вспоминать. Голоса. Они говорили о чем-то. Что-то закатилось 
                    под ее кровать. Фён опускается на колени и что-нибудь рассмотреть. Пол под кроватью и правда белесый от пыли. Вдалеке, 
                    у стены, {hiddenobject|что-то} лежит.]]
  ,cnd          = not_("face._evening")
}

underbed2 = staticitem {
   dsc          = [[Фён почти забыла, что под ее кроватью {что-то} лежит -- какой-то предмет, металлический или стеклянный, который она не 
                    смогла достать.]]
  ,cnd          = if_("face._evening and not face._syringe")
  ,act          = [[Фён ложится на пол и засовывает руку под кровать, она вытягивается как только может и даже касается непонятного предмета 
                    пальцами. Это что-то стеклянное... Или металлическое? Но нет, Фён никак не может достать этот предмет, она просто не 
                    дотягивается.]]
}

hiddenobject = staticitem {
  act           = chain_ {
                    set_("face._hidden"),
                    [[Фён ложится на пол и засовывает руку под кровать, она вытягивается как только может и даже касается непонятного 
                      предмета пальцами. Это что-то стеклянное... Или металлическое? Но нет, Фён никак не может достать этот предмет, она 
                      просто не дотягивается.]]
                  }
}

neardoor = scene {
   tile         = { tile "doorframe", 0, 20 }
  ,bounds       = { nil, 200 }
  ,enter        = choose_ {
                     ["face._drugs==1 and not attack1._seen"] = walk_("attack1")
                    ,["face._drugs==2"] = walk_("attack2")
                  }
  ,obj          = { "door", "door2", "doorsteps" }
  ,nav          = {
                     up = vw("В туалет", "toilet")
                    ,down = vw("К окну", "cell")
                  }
}

door = staticitem {
   dsc          = "{Дверь} в коридор все так же закрыта. Выхода отсюда нет."
  ,act          = chain_ { sound_("doorclosed2"), "Нет, сколько ни пытайся, открыть ее так не получится." }
  ,disable      = if_("face._evening")
  ,cnd          = not_("face._dream")
}

door2 = staticitem {
   dsc          = choose_ {
                     ["default"] = 
                        [[Обшарпанная {дверь}, которую Фён уже много раз пыталась безуспешно открыть, вновь почему-то привлекает ее 
                          внимание.]]
                    ,["face._door"] = "Дверь в коридор {открыта}."
                  }
  ,act          = choose_ {
                     ["default"] = 
                        chain_ { 
                          set_("face._door"), 
                          "Не может быть! Кажется, дверь открыта... Видимо, люди с пустыми лицами просто забыли ее запереть." 
                        }
                    ,["face._door"] = walk_("coridor_transition")
                  }
  ,cnd          = if_("face._dream")
}

doorsteps = staticitem {
   dsc          = "^^В коридоре вновь раздаются {шаги}. Фён прислушивается. Кажется, какая-то дверь хлопнула совсем неподалеку от нее."
  ,act          = chain_ { 
                    set_("face._visitors"), 
                    [[Неужели снова? Что они хотят? Фён не хочет, чтобы ее видели эти страшные люди без лиц. Но у нее совсем немного 
                      времени! Осталось лишь несколько секунд...]]
                  }
  ,showonce     = true
  ,cnd          = if_("face._hidden and face._toilet and not face._dream")
}

toilet = scene {
   tile         = cm_tile "darkwall"
  ,bounds       = { 145, nil, 710 }
  ,enter        = choose_ {
                     ["default"] = set_("face._toilet")
                    ,["face._visitors"] = walk_("visitors1")
                  }
  ,dsc          = [[В уборной стоит такой запах, точно здесь сдохла крыса. Странно, Фён не чувствовала этого запаха вчера... Если это было 
                    вчера. В любом случае Фён совсем не хочется здесь задерживаться ни на минуту. И уж тем более подходить к унитазу, от 
                    которого, кажется, и исходит эта вонь.^]]
  ,obj          = { "valve", "washer", "toilet_items" }
  ,nav          = { 
                    down = vw("Выйти", "neardoor")
                  }
}

valve = staticitem {
   dsc          = "Из {крана}"
  ,act          = "Вода слегка желтовая, с ржавчиной. Фён даже передергивает от мысли, что она пила эту воду совсем недавно."
  ,cnd          = not_("face._dream")
}

washer = staticitem {
   dsc          = "в {раковине} капает вода."
  ,act          = "Раковина вся пожелтела от грязи."
  ,cnd          = not_("face._dream")
}

toilet_items = staticitem {
   dsc          = "В уборной стоит отвратительная вонь."
  ,cnd          = if_("face._dream")
}

------------------------------------------------------------------------------------------
-- Dinner
------------------------------------------------------------------------------------------

visitors1 = scene {
   bounds       = { 260, 220, 480 }
  ,enter        = set_checkpoint
  ,dsc          = [[Фён не успела сделать и шага, как дверь ее комнаты распахнулась.^^
                    На пороге стояла высокая фигура в бесцветном халате с черной пустотой вместо лица. Был и еще один посетитель, ниже 
                    ростом, который точно прятался за широкой спиной безликого.^
                    Фён невольно {walk(visitors2)|попятилась} к стене.]]
  ,alwaysdsc    = true
}

visitors2 = scene {
   bounds       = { 260, 220, 480 }
  ,obj          = { "visitors2_woman", "visitors2_shuteyes" }
}

visitors2_woman = staticitem {
   dsc          = [[Низкая {фигура} прошла вперед, а безликий мужчина -- если это был мужчина -- встал у двери, точно охраняя ее.^
                    Фён прижалась к стене, стараясь не смотреть в их черные пустые лица. Низкая фигура была женщиной, она слегка сутулилась 
                    и держала в руках металлический поднос с тарелкой. Она медленно, как бы неуверенно приближалась к Фён. Поднос позвякивал 
                    в ее руках. Фён уже слышала ее дыхание, сиплое и неровное, как у старухи. Некрасивые жилистые руки, которыми она держала 
                    поднос, странно подрагивали.]]
  ,act          = walk_("visitors_dlg1")
}

visitors2_shuteyes = staticitem {
   dsc          = "Фён {отвернулась} и закрыла глаза."
  ,act          = "Фён кажется, что если эти безликие люди пробудут здесь еще хотя бы одну минуту, у нее снова начнется приступ."
  ,showonce     = true
}

visitors_dlg1 = dialog {
   bounds       = { 260, 220, 480 }
  ,dsc          = choose_ {
                     ["default"] = "-- Не бойтесь, мы просто принесли завтрак!"
                    ,["face._dlgbag"] = "-- Ну что, передумали?"
                  }
  ,fst_phr      = choose_ {
                     ["default"] = "Вам нужно поесть. Вы сегодня весь день ничего не ели. Так нельзя."
                    ,["face._dlgbag"] = "И все-таки вам нужно поесть..."
                  }
  ,dlg          = dxml "visitors1"
}

visitors3 = scene {
   bounds       = { 260, 220, 480 }
  ,obj          = { "visitors3_woman", "visitors3_man", "visitors3_tired" }
}

visitors3_woman = staticitem {
   dsc          = "{Женщина} с трясущимися руками расставляет что-то на столе у окна."
  ,act          = [[На секунду Фён показалось, что она смогла разглядеть ее лицо -- уставшее, с глубокими морщинами на лбу и слезящимися 
                    глазами, как у глубокой старухи. Однако спустя секунду она вновь видела лишь черноту.]]
  ,showonce     = true
}

visitors3_man = staticitem {
   dsc          = [[Ее спутник {отошел} от двери и стоит рядом. Быть может, ему не терпится уйти? Его лицо сливается с сумраком комнаты.]]
  ,act          = [[Дверь по-прежнему открыта. На какое-то мгновение Фён кажется, что она могла бы успеть {walk(fakerun1)|выскользнуть} в 
                    коридор, но потом она понимает, что безликий мужчина, скорее всего, успеет ее перехватить. И даже если у нее получится 
                    -- что делать дальше? Ведь они наверняка погонятся за ней...]]
}

visitors3_tired = staticitem {
   dsc          = [[{Фён} чувствует себя измотанной. Этот непонятный день кажется ей то коротким, точно длился всего лишь несколько минут, 
                    то невыносимо длинным. Она хочет только одного -- спать.]]
  ,act          = "Она даже почти готова {walk(visitors_transition)|принять эту непонятную таблетку}."
}

visitors_transition = pause {
   time         = 1
  ,enter        = chain_ { 
                    put_("dinner", "cell"), 
                    put_("spoon", "cell"), 
                    put_("cup", "cell"), 
                    put_("drugstore", "cell"), 
                    unset_("face._visitors"), 
                    set_("face._evening") 
                  }
  ,next         = "cellslide"
}

cellslide = slideright {
   tile         = tile "wall"
  ,x            = -100
  ,y            = 0
  ,endx         = 0
  ,step         = 2
  ,fps          = 20
  ,next         = "cell"
}

fakerun1 = scene {
   fading       = 0
  ,ontimer      = function(s,x,y)
                    if s._frno == nil then
                      s._frno = 0;
                    end
                    s._frno = s._frno+1;
                    if s._frno == 1 then
                      drawing.copy_text(s.pic, "Дверь!", 60, 80, const.bordercolor, const.fontb, 46);
                    elseif s._frno == 10 then
                      s:clean();
                      drawing.copy_text(s.pic, "БЕЖАТЬ!", 600, 420, const.textcolor, const.fontb, 52);
                    elseif s._frno == 20 then
                      s._frno = nil;
                      walk("fakerun2");
                    end
                  end
}

fakerun2 = pause {
   time         = 1
  ,fading       = 0
  ,next         = "fakerun3"
}

fakerun3 = scene {
   bounds       = { 260, 240, 480 }
  ,dsc          = "Фён, {walk(fakerun4)|решив}, что мужчина не смотрит на нее, бросилась к открытой двери..."
  ,alwaysdsc    = true
}

fakerun4 = cutscene {
   bounds       = { 260, 240, 480 }
  ,dsc          = [[Она даже успела выбежать в коридор... Однако спустя секунду чьи-то сильные руки схватили ее сзади, сопротивляться 
                    было бессмысленно.]]
  ,next         = "sys_gameover"
}

syringe = item {
   nam          = choose_ {
                     ["default"] = "Шприц"
                    ,["face._swater"] = "Шприц с водой"
                    ,["face._sdrug"] = "Шприц с лекарством"
                  }
  ,img          = ico "syringe-use"
  ,ico          = ico "syringe"
  ,dsc          = "^^На полу лежит стеклянный {шприц}."
  ,use          = chooseuse_ {
                     ["default"] = "Не стоит этого делать."
                    ,["washer"] = 
                        choose_ {
                           ["default"] = "Шприц и так пуст."
                          ,["face._swater or face._sdrug"] = 
                              chain_ { 
                                unset_("face._swater"), 
                                unset_("face._sdrug"), 
                                "Фён слила содержимое шприца в раковину." 
                              }
                        }
                    ,["valve"] = "Нет, так набрать воды в шприц не получится."
                    ,["dinner"] = "Вряд ли получится это сделать. Да и зачем?"
                    ,["cup"] = 
                        choose_ {
                           ["default"] =
                            choose_ {
                               ["face._nowater"] = "Стаканчик пуст."
                              ,["not face._drugwater"] = 
                                  chain_ { 
                                    set_("face._nowater"), 
                                    set_("face._swater"), 
                                    "Фён набрала в шприц простой воды." 
                                  }
                              ,["face._drugwater"] = 
                                  chain_ { 
                                    unset_("face._drugwater"), 
                                    set_("face._nowater"), 
                                    set_("face._sdrug"), 
                                    "Фён набрала в шприц раствор из пластикового стаканчика." 
                                  }
                            }
                          ,["face._swater or face._sdrug"] = "Шприц уже заполнен. Надо бы сначала слить куда-нибудь его содержимое."
                        }
                    ,["fohn"] = 
                        choose_ {
                           ["face._swater"] = "Фён не собирается колоть себе воду."
                          ,["face._sdrug"] = walk_("dream1")
                          ,["not face._swater and not face._sdrug"] = "Шприц пуст."
                        }
                  }
}

dinner = staticitem {
   dsc          = [[Ужин по-прежнему стоит, непритронутый, на столе -- {тарелка} с кашей, которая больше похожа на размешанную в воде 
                    известку, и два куска черного хлеба.]]
  ,act          = "Аппетит это варево явно не вызывает."
  ,disable      = if_("face._dream")
}

spoon = item {
   nam          = "Ложка"
  ,dsc          = "Рядом с тарелкой лежит аллюминиевая {ложка}."
  ,tak          = "Фён взяла ложку."
  ,img          = ico "spoon-use"
  ,ico          = ico "spoon"
  ,use          = chooseuse_ {
                     ["default"] = "Вряд ли имеет смысл это делать."
                    ,["dinner"] = 
                        choose_ {
                           ["default"] =  
                              chain_ {
                                set_("face._eat"),
                                [[Фён все же осилила себя и съела одну ложку. Каша была безвкусной и комковатой -- и почти холодной. Фён с 
                                  трудом заставила себя проглотить ее, и тут же почувствовала как что-то подступает к ее горлу. Она 
                                  несколько раз глубоко вздохнула, пытаясь сдержать тошноту.]]
                              }
                          ,["face._eat"] = "Нет, есть это она больше не будет."
                        }
                        ,["underbed2"] =  
                            chain_ { 
                              put_("syringe", "cell"),
                              set_("face._syringe"),
                              [[Фён встала на колени и, запустив под кровать руку с зажатой в ней ложкой, попыталась зацепить непонятный 
                                предмет, откатившийся к самой стене. К счастью, ложка оказалась достаточно длинной. Фён зацепила ложкой 
                                предмет и вытолкнула его из-под кровати. ^На пол выкатился большой стеклянный шприц.]]
                            }
                  }
}

cup = item {
   nam          = choose_ {
                     ["default"] = "Стакан с водой"
                    ,["face._nowater"] = "Пустой стакан"
                    ,["face._drugwater"] = "Стакан с лекарством"
                  }
  ,dsc          = [[У самого края стола, точно кто-то хотел, чтобы он опрокинулся на пол -- стоит пластиковый {стаканчик} с водой, -- точно 
                    такой же, как и вчера.]]
  ,img          = ico "pcup-use"
  ,ico          = ico "pcup"
  ,tak          = chain_ { set_("face._cup"), "Фён взяла стакан." }
  ,use          = chooseuse_ {
                     ["default"] = "Не стоит этого делать."
                    ,["syringe"] = 
                        choose_ {
                           ["default"] = "Зачем? Фён и сама не уверена, что она собирается сделать. К тому же, стаканчик пуст."
                          ,["face._drugwater or not face._nowater"] = "Вряд ли получится залить жидкость в шприц таким образом."
                        }
                    ,["fohn"] = 
                        choose_ {
                           ["default"] = 
                              choose_ {
                                 ["default"] = 
                                    chain_ { 
                                      set_("face._nowater"), 
                                      sound_("drink"), 
                                      "Фён выпила воды из стакана." 
                                    }
                                ,["face._swallow"] = 
                                    chain_ { 
                                      unset_("face._swallow"), 
                                      inc_("face._drugs"), 
                                      sound_("drink"), 
                                      set_("face._nowater"), 
                                      "Фён сделала несколько глотков воды и, наконец-то, смогла проглотить таблетку." 
                                    }
                                ,["face._rust"] = "Фён не хочется пить. Тем более эту ржавую воду из-под крана."
                              }
                          ,["face._drugwater"] = 
                              chain_ { 
                                sound_("drink"), 
                                inc_("face._drugs"), 
                                unset_("face._drugwater"), 
                                set_("face._nowater"), 
                                choose_ {
                                  ["face._swallow"] = inc_("face._drugs")
                                }
                                "Фён, с трудом сдерживая тошноту, проглотила мутную микстуру из стакана." 
                              }
                          ,["face._nowater"] = "В стакане ничего нет."
                        }
                    ,["washer"] = 
                        choose_ {
                           ["default"] = chain_ { set_("face._nowater"), sound_("waterpour"), "Фён вылила воду в раковину." }
                          ,["face._nowater"] = "В стаканчике уже и так нет воды."
                          ,["face._drugwater"] = 
                              chain_ { 
                                set_("face._nowater"), 
                                unset_("face._drugwater"), 
                                sound_("waterpour"), 
                                "Фён вылила лекарство в раковину." 
                              }
                        }
                    ,["valve"] = 
                        choose_ {
                           ["default"] = "В стаканчике уже и так есть вода."
                          ,["face._nowater"] = 
                              chain_ { 
                                unset_("face._nowater"), 
                                set_("face._rust"), 
                                sound_("watercup"), 
                                "Фён налила желтоватой воды из-под крана в стакан." 
                              }
                        }
                  }
}

drugstore = staticitem {
   dsc          = choose_ {
                     ["default"] = 
                        [[Рядом со стаканом, на темно-серой салфетке, лежат {две таблетки}, похожие на аспирин. Они просто оставили таблетки 
                          здесь, как будто им на самом деле все равно, будет ли Фён их принимать.]]
                    ,["face._tab==1"] = [[Рядом со стаканом, на темно-серой салфетке, лежит {таблетка}, похожая на аспирин.]]
                  }
  ,act          = choose_ {
                     ["default"] = chain_ { inc_("face._tab"), take_("drug"), "Фён взяла таблетку." }
                    ,["inventory.has(drug)"] = "У Фён уже есть одна таблетка. Пусть эта лучше пока полежит на столе."
                  }
  ,cnd          = if_("face._tab < 2 and not face._dream")
}

drug = item {
   nam          = "Таблетка"
  ,img          = ico "tab-use"
  ,ico          = ico "tab"
  ,use          = chooseuse_ {
                     ["default"] = "Не стоит этого делать."
                    ,["fohn"] = 
                        chain_ { 
                          set_("face._swallow"), 
                          drop_("drug"), 
                          [[Фён положила таблетку в рот и попыталась проглотить ее, однако упрямая таблетка встала у нее поперек горла. Фён 
                            чувствует -- еще немного, и ее просто вырвет.]]
                        }
                    ,["washer"] = 
                        [[Фён еще успеет избавиться от таблетки. К тому же -- кто знает? -- вдруг та вновь появится у нее на столе, как это 
                          было в прошлый раз.]]
                    ,["valve"] = "Таблетка растворяется в воде, но лучше бы сначала налить воды в стакан."
                    ,["cup"] = 
                        choose_ {
                           ["default"] = 
                              chain_ { 
                                set_("face._drugwater"), 
                                drop_("drug"), 
                                "Фён бросила таблетку в стаканчик, и та быстро растворилась в воде." 
                              }
                          ,["face._nowater"] = "Какой смысл делать это? В стаканчике же нет воды."
                        }
                  }
}

dream1 = cutscene {
   bounds       = { 260, 220, 480 }
  ,enter        = chain_ { drop_("cup"), drop_("drug"), drop_("syringe"), drop_("spoon"), set_("face._dream") }
  ,dsc          = [[Фён сделала себе укол. Поначалу она ничего не почувствовала, голова все так же болела. За окном было так темно, что Фён
                    не могла ничего разглядеть, кроме густой непроницаемой черноты.^
                    Она прилегла на постель, однако ей снова не спалось. Ей почему-то казалось, что она не может позволить себе заснуть, что 
                    если она заснет, то обязательно случится что-нибудь плохое.]]
  ,next         = "cell"
}

attack1 = pause {
   time         = 500
  ,tile         = ey_tile "wake"
  ,next         = "neardoor"
}

attack2 = pause {
   time         = 500
  ,tile         = ey_tile "wake"
  ,next         = "attack3"
}

attack3 = cutscene {
   bounds       = { 260, 220, 480 }
  ,dsc          = [[Внезапная боль обручем сдавила голову Фён. В глазах у нее потемнело, она повалилась на пол, обхватив голову руками и 
                    через несколько секунд она не могла даже пошевелиться. Боль парализовала ее. Боль усиливалась с каждым мгновением. У Фён 
                    не было даже сил, чтобы закричать. Она чувствовала, как что-то выжигает ее всю изнутри, и ее тело сводит от страшной 
                    судороги, все сильнее и сильнее, с каждой секундой.]]
  ,next         = "sys_gameover"
}

------------------------------------------------------------------------------------------
-- Outside
------------------------------------------------------------------------------------------

spoon2 = item {
   nam          = "Ложка"
  ,dsc          = "На полу валяется аллюминиевая {ложка}. Наверное, Фён обронила ее, когда ложилась спать."
  ,tak          = "Фён подняла ложку."
  ,img          = ico "spoon-use"
  ,ico          = ico "spoon"
  ,cnd          = if_("face._dream")
  ,use          = chooseuse_ {
                     ["default"] = "Это не имеет смысла."
                    ,["coridor3_door"] = 
                        chain_ { 
                          set_("face._doorunlock"), 
                          "Фён просунула ложку в щель у косяка двери и сдвинула щеколду замка. Кажется, теперь дверь можно открыть." 
                        }
                  }
}

cordgrid = {
   "coridor4"   --1
  ,"coridor3"   --2
  ,"coridor2"   --3
  ,"coridor1"   --4
  ,"rcoridor1"  --5
  ,"rcoridor2"  --6
  ,"rcoridor3"  --7
  ,"rcoridor4"  --8
}

function walkcor_(loc)
  return function()
    face._pos = face._pos - face._step;
    if face._pos <= 0 then
      face._pos = 1
      face._step = 0 - face._step;
    elseif face._pos >= 8 then
      face._pos = 8;
      face._step = 0 - face._step;
    end
    walk(loc);
  end
end

steps = staticitem {
   dsc          = function(s)
                    local hw = deref(here());
                    local idx = 0;
                    for i,v in ipairs(cordgrid) do
                      if v == hw then
                        idx = i;
                        break;
                      end
                    end
                    local d = tostring(idx)..";"..tostring(face._pos);
                    s._diff = idx - face._pos;
                    if idx == face._pos then
                      play_sound("bam2");
                      walk("death1");
                    elseif math.abs(idx - face._pos) == 2 then
                      s._dsc = 2;
                      return "^^Фён слышит вдалеке чьи-то {шаги}. "..d;
                    elseif math.abs(idx - face._pos) == 1 then
                      s._dsc = 1;
                      return "^^Чьи-то {шаги} отчетливо раздаются в темноте. Кто-то идет прямо на встречу Фён. "..d;
                    else
                      return d;
                    end
                  end
  ,act          = function(s)
                    local app = "";
                    if s._diff < 0 then
                      app = "^Кажется, звук шагов доносится справа.";
                    else
                      app = "^Кажется, звук шагов доносится слева.";
                    end
                    if s._dsc == 2 then
                      return "Наверняка это те люди без лиц."..app;
                    elseif s._dsc == 1 then
                      return "Еще секунда -- и они будут здесь! Надо что-то делать. Нельзя попадаться им на глаза."..app;
                    end
                  end
}

coridor_transition = pause {
   time         = 1500
  ,next         = choose_ {
                     ["default"] = walk_("coridor_transition2")
                    ,["coridor_transition2._seen"] = walk_("coridor2")
                  }
}

coridor_transition2 = pause {
   time         = 2000
  ,next         = "coridor_transition3"
}

coridor_transition3 = pause {
   time         = 1000
  ,next         = "neardoor_outside"
}

neardoor_outside = scene {
   tile         = { tile "door", 300, 203 }
  ,dsc          = choose_ {
                     ["default"] = 
                        [[Фён нерешительно стоит у приоткрытой двери в свою камеру, не слишком хорошо понимая, что ей делать дальше. На 
                          какое-то мгновение ей даже хочется вернуться обратно -- просто зайти в свою сумеречную тюрьму с решетками на окнах 
                          и запереть за собой дверь.]]
                    ,["coridor1._seen"] = 
                        [[Неужели у нее нет другого выбора, как просто вернуться? Зайти в свою сумеречную тюрьму с решетками на окнах, 
                          запереть за собой дверь... Просто смирившись с тем, что она никогда не выберется отсюда.]]
                  }
  ,obj          = { "outside_look" }
  ,alwaysdsc    = true
  ,nav          = {
                     up = vw("Вернуться в камеру", "neardoor")
                    ,right = vw("Отойти от двери", walkcor_("coridor1"))
                  }
}

outside_look = staticitem {
   dsc          = "Впрочем, страх быстро проходит, и Фён начинает {оглядываться} по сторонам."
  ,act          = [[Это совсем не похоже на больницу. У Фён создается ощущение, что она оказалась в темном подземном бункере, где нет ни 
                    единого окна, а яркие электрические лампы на стенах и у потолка почему-то совсем не разгоняют густой пугающий сумрак, а 
                    лишь неприятно бьют в глаза. Кажется -- она сделает всего лишь несколько шагов от своей двери и навеки потеряется в этих 
                    узких бессветных коридорах.]]
  ,cnd          = not_("coridor1._seen")
  ,showonce     = true
}

coridor1 = scene {
   tile         = { tile "flash1", 60, 60 }
  ,bounds       = { nil, 360 }
  ,dsc          = [[Яркие электрические лампы бьют в глаза, но коридор все равно настолько темный, что Фён даже не может разглядеть 
                    очертания стен.]]
  ,alwaysdsc    = true
  ,obj          = { "coridor1_return", "steps" }
  ,nav          = {
                     left = vw("Налево", walkcor_("coridor2"))
                    ,right = vw("Направо", walkcor_("rcoridor1"))
                  }
}

coridor1_return = staticitem {
   dsc          = "^Фён смутно припоминает, что {где-то здесь} должна быть дверь в ее камеру."
  ,act          = walkblack_("neardoor_outside")
}

coridor2 = scene {
   tile         = { tile "flash2", 800, 160 }
  ,dsc          = [[Фён чувствует, как у нее начинают дрожать ноги. Она оглядывается. Ей хочется вернуться. Но она уже не уверена, что 
                    сможет найти дорогу назад.]]
  ,alwaysdsc    = true
  ,obj          = { "coridor2_status", "steps" }
  ,nav          = {
                     left = vw("Налево", walkcor_("coridor3"))
                    ,right = vw("Направо", walkcor_("coridor1"))
                  }
}

coridor2_status = staticitem {
   dsc          = "^^Фён кажется, что она уже проходила здесь раньше."
  ,cnd          = if_("rcoridor4._seen")
}

coridor3 = scene {
   tile         = { tile "flash1", 400, -120 }
  ,bounds       = { nil, 120 }
  ,dsc          = "Этот коридор никогда не закончится..."
  ,alwaysdsc    = true
  ,obj          = { "coridor3_door", "steps" }
  ,nav          = {
                     left = vw("Налево", walkcor_("coridor4"))
                    ,right = vw("Направо", walkcor_("coridor2"))
                  }
}

coridor3_door = staticitem {
   dsc          = [[^^Фён смутно различает какую-то {дверь}, которая едва пропуступает во мраке. Кажется, окружающая Фён тьма упорно 
                    пытается скрыть от нее выход. Но выход все-таки есть. Он совсем близко. Еще немного -- и Фён выберется из этого
                    кошмара.]]
  ,act          = choose_ {
                     ["default"] = chain_ { sound_("doorclosed2"), "Дверь закрыта." }
                    ,["face._doorunlock"] = walkblack_("dooropen")
                  }
  ,cnd          = if_("rcoridor4._seen")
}

coridor4 = scene {
   tile         = { tile "flash2", -100, 160 }  
  ,dsc          = "Отсюда просто невозможно выбраться. Коридору нет конца."
  ,alwaysdsc    = true
  ,obj          = { "steps" }
  ,nav          = {
                     left = vw("Налево", walkcor_("coridor2"))
                    ,right = vw("Направо", walkcor_("rcoridor4"))
                  }
}

rcoridor1 = scene {
   tile         = { tile "flash1", 740, 40 }
  ,dsc          = "Фён по-прежнему прикрывает руками глаза. Ей кажется, что свет ламп ослепляет ее."
  ,alwaysdsc    = true
  ,obj          = { "steps" }
  ,nav          = {
                     left = vw("Налево", walkcor_("coridor1"))
                    ,right = vw("Направо", walkcor_("rcoridor2"))
                  }
}

rcoridor2 = scene {
   tile         = { tile "flash2", 360, -160 }
  ,bounds       = { nil, 100 }
  ,dsc          = "Фён уже начинает жалеть, что вообще вышла из своей камеры."
  ,alwaysdsc    = true
  ,obj          = { "steps" }
  ,nav          = {
                     left = vw("Налево", walkcor_("rcoridor1"))
                    ,right = vw("Направо", walkcor_("rcoridor3"))
                  }
}

rcoridor3 = scene {
   tile         = { tile "flash1", -20, -20 }
  ,bounds       = { nil, 280 }
  ,dsc          = "Отсюда нет выхода. Впереди только темнота."
  ,alwaysdsc    = true
  ,obj          = { "steps" }
  ,nav          = {
                     left = vw("Налево", walkcor_("rcoridor2"))
                    ,right = vw("Направо", walkcor_("rcoridor4"))
                  }
}

rcoridor4 = scene {
   tile         = { tile "flash1", -160, 120 }
  ,dsc          = [[Фён почти уверена, что заблудилась в этом бессветном коридоре. Теперь она не сможет вернуться в свою камеру, если даже 
                    захочет.]]
  ,alwaysdsc    = true
  ,obj          = { "steps" }
  ,nav          = {
                     left = vw("Налево", walkcor_("rcoridor3"))
                    ,right = vw("Направо", walkcor_("coridor1"))
                  }
}

dooropen = pause {
   time         = 2000
  ,next         = "stairs1"
}

stairs1 = pause {
   time         = 1000
  ,tile         = { tile "stairs", 437, 240 }
  ,enter        = drop_("spoon")
  ,fading       = 30
  ,next         = "stairs2"
}

stairs2 = scene {
   tile         = { tile "stairs", 437, 240 }
  ,dsc          = [[Фён стоит на темной лестничной клетке. Спуска вниз нигде не видно, как будто из этого здания и правда нет выхода.
                    Бетонная лестница без перил с высокими ступенями поднимается {walk(stairslide)|вверх}, в отверстую темноту над 
                    головой.]]
  ,alwaysdsc    = true
}

stairslide = slidedown {
   fading       = 0
  ,x            = 437
  ,y            = 440
  ,tilew        = 523
  ,tileh        = 360
  ,tile         = tile "stairs"
  ,step         = 1
  ,fps          = 20
  ,next         = "death0"
}

death0 = scene {
   bounds       = { 260, 240, 480 }
  ,enter        = unlock_("4-escape")
  ,localact     = chain_ { sound_("bam2"), walk_("death1") }
  ,dsc          = [[Фён различает впереди какой-то свет. Свет становится ярче с каждой секундой. Она {localact|невольно} идет навстречу 
                    этому свету.]]
  ,alwaysdsc    = true
}

death1 = pause {
   time         = 500
  ,tile         = ey_tile "wake"
  ,next         = "death2"
}

death2 = pause {
   time         = 2000
  ,next         = "cellslide2"
}


------------------------------------------------------------------------------------------
-- Final
------------------------------------------------------------------------------------------

cellslide2 = slideright {
   tile         = tile "wall"
  ,x            = -100
  ,y            = 0
  ,endx         = 0
  ,step         = 2
  ,fps          = 20
  ,next         = "cell_liedown"
}

cell_liedown = scene {
   tile         = tile "wall"
  ,enter        = drop_("spoon")
  ,bounds       = { 100, nil, 750 }
  ,dsc          = [[Фён лежит на постели. В комнате совсем темно, она даже едва может разглядеть очертания стен. Она все-таки смогла 
                    заснуть? Но Фён кажется, что совсем ненадолго. Она по-прежнему чувствует себя уставшей. И снова разболелась правая 
                    рука.^Нет смысла продолжать лежать на постели. Сон больше не идет. Надо {walk(cell_final)|вставать}.]]
  ,alwaysdsc    = true
}

cell_final = scene {
   tile         = tile "wall"
  ,bounds       = { 100, nil, 750 }
  ,dsc          = "Здесь совсем тихо. Можно подумать, что Фён совсем одна в этом здании. Лишь едва слышно поскрипывают половицы."
  ,alwaysdsc    = true
  ,nav          = {
                    down = vw("В другую часть комнаты", "neardoor_final")
                  }
}

neardoor_final = scene {
   tile         = { tile "doorframe", 0, 20 }
  ,bounds       = { nil, 200 }
  ,obj          = { "door_final" }
  ,nav          = {
                     up = vw("В туалет", "toilet_final")
                    ,down = vw("К окну", "cell_final")
                  }
}

door_final = staticitem {
   dsc          = [[На какое-то мгновение Фён кажется, что {дверь} ее камеры действительно открыта -- и что все это странное пугающее
                    блуждание по темному коридору вовсе не было сном.]]
  ,act          = chain_ { stop_music, walk_("final1") }
}

toilet_final = scene {
   tile         = cm_tile "darkwall"
  ,bounds       = { 145, nil, 710 }
  ,dsc          = [[В туалете все так же отвратительно пахнет.]]
  ,alwaysdsc    = true
  ,nav          = { 
                    down = vw("Выйти", "neardoor_final")
                  }
}

final1 = pause {
   time         = 4000
  ,next         = "main"
}